package net.sinofool.dbpool.config; import java.sql.SQLException; import java.util.concurrent.ConcurrentHashMap; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class DBSource { private ConcurrentHashMap<String, BasicDataSource> datasources = new ConcurrentHashMap<String, BasicDataSource>(); public DataSource getDataSource(DBServer server) { BasicDataSource ds = datasources.get(server.checksum()); if (ds != null) { return ds; } ds = new BasicDataSource(); ds.setDriverClassName(server.driver); ds.setUrl("jdbc:mysql://" + server.host + ":" + server.port + "/" + server.db + "?useUnicode=yes&characterEncoding=UTF-8&autoReconnect=true"); ds.setUsername(server.user); ds.setPassword(server.pass); ds.setInitialSize(server.coreSize); ds.setMinIdle(server.coreSize); ds.setMaxActive(server.maxSize); ds.setMinEvictableIdleTimeMillis(server.idleTimeSeconds * 1000L / 2); datasources.put(server.checksum(), ds); return ds; } public void closeDataSource(DBServer server) { BasicDataSource ds = datasources.remove(server.checksum()); if (ds == null) { // TODO this should never happened. return; } try { ds.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }